#ifndef __MYSQLMANAGER_H__
#define __MYSQLMANAGER_H__

#include <iostream>
#include <string>
#include <mutex>
#include <mysql/mysql.h>

/**
 * 单例类
 * 目的
 * 1. 全局（整个程序）唯一一个实例
 * 
 * 原理
 * 1. 将构造函数私有化（外部无法实例化对象）
 * 2. 将类指针设置为静态数据成员并且私有化
 * 3. 提供一个静态成员函数，获取类指针
 * 
 * 步骤
 * 1. 构造函数私有化
 * 2. 设置静态数据成员指针并初始化
 * 3. 提供静态成员函数访问静态指针 getInstance()
 * 4. 为了线程安全，使用 mutex 加锁
 * 
 * 
 * 数据库操作
 * 1. 注册功能
 *      1. 查询数据库，注册的用户是否存在
 *      2. 将用户信息插入数据库
*/

#define SQLAPP SqlManager::getInstance()

class SqlManager
{
private:
    SqlManager();

    void connectMysql();
public:
    ~SqlManager();

    static SqlManager* getInstance();

    /**
     * 查询用户是否存在
     * 参数：要查询的用户名
     * 返回值：true：用户已存在，false：用户不存在
    */
    bool isUserExist(const std::string &user);

private:
    static SqlManager* self;
    static std::mutex selfMutex;

    // MYSQL *sqlConn;
};


#endif //__MYSQLMANAGER_H__